#ifndef _NE_PARTICLE_H_
#define _NE_PARTICLE_H_

#include <mathematics/Color.h>
#include <mathematics/Matrix4.h>

namespace ne
{
    class NEAPI Particle
    {
        public:
            Particle();

            Particle(const Particle &p);

            Particle& operator = (const Particle &p);

            bool isDead(const real interval=0.0f) const;

            virtual bool isParticleEmitter() const;

            virtual ~Particle();

        public:
            real mass;

            Vector3 position;
            Quaternion orientation;
            Vector3 scale;
            Color color;
            Vector2 texCoord;

            Vector3 direction;
            Vector3 velocity;
            Vector3 axis;
            real rotation;
            real zoom;

            real totalLifetime; // 0.0f = forever

            //TODO: Run time internal value
            real lifetime;
            Vector3 force;
    };

    typedef std::vector<Particle*> ParticleVector;
    typedef ParticleVector::iterator ParticleVectorIterator;
    typedef ParticleVector::const_iterator ParticleVectorConstIterator;

    typedef std::list<Particle*> ParticleList;
    typedef ParticleList::iterator ParticleListIterator;
    typedef ParticleList::const_iterator ParticleListConstIterator;
}

#endif
